import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

public class JdbcInsertDemo {
    public static void main(String[] args) throws SQLException {
        // 使用 jdbc 往数据库中插入一个记录
        // 需要提前准备好数据库（java）和数据表（student）

        // 1.创建数据源，描述了数据库服务器在哪
        DataSource dataSource = new MysqlDataSource();
        // 设置数据库所在的位置，当前是固定写法
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("000000");

        // 2.和数据库建立网络连接（写的 jdbc 代码本质上是一个 MySQL 客户端，要通过网络和服务器进行通信）
        Connection connection = dataSource.getConnection();

        Scanner input = new Scanner(System.in);
        System.out.println("请输入学号：");
        int id = input.nextInt();
        System.out.println("请输入姓名：");
        String name = input.next();

        // 3.构造一个 sql 语句来完成 插入操作
        // 描述 sql 语句的
        String sql = "insert into student values (?, ?)";
        // jdbc 还需要搭配一个特点的对象来描述这里的 sql 的情况
        PreparedStatement statement = connection.prepareStatement(sql);//这一步才是真正的构造 sql
        statement.setInt(1, id);
        statement.setString(2, name);
        System.out.println("sql:" + statement);

        // 4.执行 sql 语句（控制服务器给客户端发送请求）
        // 如果是增删改则是使用 executeUpdate()
        // 如果是查则是使用 executeQuery()
        // 返回结果的含义就是执行完 sql 语句后几行数据受到了影响
        int ret = statement.executeUpdate();
        System.out.println("ret = " + ret);

        // 5.断开与数据库的连接，并且释放必要的资源
        statement.close();
        connection.close();
    }
}
